package com.triones.yjj.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.mapper.BaseMapperPlus;
import com.triones.yjj.entity.ActivityDO;
import com.triones.yjj.entity.bo.ActivityListParams;
import com.triones.yjj.entity.bo.ActivityManageDetailParams;
import com.triones.yjj.entity.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 活动管理 mapper 接口
 *
 * @Author: triones
 */
public interface ActivityMapper extends BaseMapperPlus<ActivityMapper, ActivityDO, ActivityVO> {

    /**
     * 获取活动列表
     * @param wrapper
     * @return
     */
    List<ActivityVO> getList(@Param(Constants.WRAPPER) QueryWrapper<ActivityDO> wrapper);

    /**
     * 获取活动详情
     * @param id
     * @return
     */
    ActivityVO getDetailById(@Param("id") Long id);

    /**
     * 带访问权限的活动列表（分页）
     * @param build
     * @param params
     * @return
     */
    Page<VisitAuthActivityListVO> teamNoExistStaffPageList(@Param("page") Page<Object> build,@Param("params") ActivityListParams params);


    ActivityWxInfoVO getActivityInfoById(@Param("id") Long id);

    ActivityCountBSAVO getActivityCountBSATotal(@Param("activityId") Long activityId);

    /**
     * 活动浏览用户
     * @param activityId
     * @return
     */
    List<ActivityOrderUserVO> getActivityBrowseUserList(@Param("activityId") Long activityId);

    /**
     * 活动下单用户
     * @param activityId
     * @return
     */
    List<ActivityOrderUserVO> getActivityOrderUserList(@Param("activityId") Long activityId);

    /**
     * 获取活动列表
     * @param build
     * @param wrapper
     * @return
     */
    Page<ActivityListVO> pageList(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<ActivityDO> wrapper);

    /**
     * 获取员工商家活动列表
     * @param build
     * @param wrapper
     * @return
     */
    Page<StaffActivityListVO> getStaffActivityPageList(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<ActivityDO> wrapper);

    /**
     * 获取活动订单关联列表（分页）
     * @param build
     * @param params
     * @return
     */
    Page<ActivityOrderListVO> getActivityOrderList(@Param("page") Page<Object> build,@Param("params") ActivityManageDetailParams params);

    /**
     * 获取活动拼团关联列表（分页）
     * @param build
     * @param wrapper
     * @return
     */
    Page<ActivityOrderGroupPurchaseListVO> activityOrderGroupPurchaseList(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<ActivityDO> wrapper);

    /**
     * 员工的最新活动
     * @param staffId
     * @param userId
     * @return
     */
    ActivityVO getStaffNewActivity(@Param("staffId") Long staffId,@Param("userId") Long userId);

    /**
     * 有效报名列表
     * @param activityId
     * @return
     */
    List<BigDataEnrollListVO> getBigDataEnrollList(@Param("activityId") Long activityId);

    /**
     * 员工排行榜（前三）
     * @param activityId
     * @return
     */
    List<Map> getStaffRank(@Param("activityId") Long activityId);

    /**
     * 获取活动订单列表（不分页）
     * @param params
     * @return
     */
    List<ActivityOrderListVO> getOrderList(@Param("params") ActivityManageDetailParams params);

    /**
     * 查询活动申请清算和已同意申请清算列表（分页）
     * @param build
     * @param wrapper
     * @return
     */
    Page<ApplySettlementVO> applySettlementPageList(@Param("page") Page<Object> build, @Param(Constants.WRAPPER) QueryWrapper<Object> wrapper);

    /**
     * 拼团统计
     * @param id
     * @return
     */
    List<Map> teamSta(@Param("id") Long id);

    /**
     * 成团数
     * @param id
     * @return
     */
    int achieveTeamCount(@Param("id") Long id);
}
